/**
 * 给定一个数组 nums 和一个值 val，你需要原地移除所有数值等于 val 的元素，返回移除后数组的新长度。
 不要使用额外的数组空间，你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
 */


function removeElement (nums, val){
    // 统计非val的个数， 并直接将数组放进数组中
    let count =0 ;
    const length = nums.length

    for(let i=0; i<length; i++) {
        if(nums[i] !== val) {
            // 这里没有改变原数组的长度， 只是双指针，不是目标值的数直接压进数组的指定位置上。
            // 而是将前面已经遍历过了的数据进行改变了而已。
            nums[count] = nums[i]
            count ++
        }
    }
    // console.log(nums)
    return count
}

const nums = [1, 2, 3, 4, 1, 3, 4, 5]
console.log(removeElement(nums,4));



function removeElementV2(nums, val){
    let len = nums.length
    let i =0;
    while(i <len) {
        if(nums[i] === val) {
            nums[i] = nums[len-1]
            len --
        }else{
            i ++
        }
    }
    return len
}

console.log(removeElementV2(nums, 4));
